package model;


import java.awt.Point;
import java.util.Random;




public class CPU_PF extends CPU{

	protected int monSymbole;
	protected int autreSymbole;
	protected boolean defence;
	protected boolean attaqueGagnante;
	protected Case caseDefence;
	protected Case  caseAttaqueGagnante;
	protected Case  caseCoupCommun;
	protected Random Caserandom = new Random();

	public CPU_PF(){

	}

	public void initVar(){

		defence=false;
		attaqueGagnante=false;
	}


	public Point getCoup(Grille grille, int numPlayer){
		initVar();


		symbole(numPlayer);
		defence(grille);

		if(attaqueGagnante==true){

			return grille.getCoord(caseAttaqueGagnante);
		}else{
			if(defence==true){
				return grille.getCoord(caseDefence);
			}else{
				coupCommun(grille);
				return grille.getCoord(caseCoupCommun);
			}
		}
	}



	public void symbole(int numPlayer){
		//---------------------------Symbole ? -------------------------

		monSymbole=numPlayer;

		if (monSymbole==1){
			autreSymbole=2;
		}else{
			autreSymbole=1;
		}	
		//---------------------------------------------------------------
	}


	public void defence(Grille g){

		//+++++++++++++++++++++++++++Defence horizontale+++++++++++++++++
		for(int i=0;i<3;i++){
			if(g.getCase(i,1).getContenu()==autreSymbole){
				if(g.getCase(i,0).getContenu()==autreSymbole && g.getCase(i,2).getContenu()==0){
					defence=true;
					caseDefence=g.getCase(i,2);
				}
				if(g.getCase(i,2).getContenu()==autreSymbole && g.getCase(i,0).getContenu()==0){
					defence=true;
					caseDefence=g.getCase(i,0);
				}
			}
		}
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

		//***************************Defence Verticale*******************
		for(int i=0;i<3;i++){
			if(g.getCase(1,i).getContenu()==autreSymbole){
				if(g.getCase(0,i).getContenu()==autreSymbole && g.getCase(2,i).getContenu()==0){
					defence=true;
					caseDefence=g.getCase(2,i);
				}
				if(g.getCase(2,i).getContenu()==autreSymbole && g.getCase(0,i).getContenu()==0){
					defence=true;
					caseDefence=g.getCase(0,i);
				}
			}
		}
		//****************************************************************


		//===========================Defence Diagonale====================

		if(g.getCase(1,1).getContenu()==autreSymbole){

			for(int i=0;i<3;i=i+2){
				for(int j=0;j<3;j=j+2){
					if(g.getCase(i,j).getContenu()==autreSymbole && caseOpposeDiag(g,i,j).getContenu()==0){
						defence=true;
						caseDefence=caseOpposeDiag(g,i,j);
					}
				}
			}

		}
		
		if(g.getCase(1,1).getContenu()==0){

			for(int i=0;i<3;i=i+2){
				for(int j=0;j<3;j=j+2){
					if(g.getCase(i,j).getContenu()==autreSymbole && caseOpposeDiag(g,i,j).getContenu()==autreSymbole){
						defence=true;
						caseDefence=g.getCase(1,1);
					}
				}
			}

		}

		//================================================================

		//##############Defence Milieu Horizontale/Verticale##############
		//Horizontale
		for(int i=0;i<3;i++){
			if(g.getCase(i,1).getContenu()==0){
				if(g.getCase(i,0).getContenu()==autreSymbole && g.getCase(i,2).getContenu()==autreSymbole){
					defence=true;
					caseDefence=g.getCase(i,1);
				}
			}	
		}

		//Verticale
		for(int i=0;i<3;i++){
			if(g.getCase(1,i).getContenu()==0){
				if(g.getCase(0,i).getContenu()==autreSymbole && g.getCase(2,i).getContenu()==autreSymbole){
					defence=true;
					caseDefence=g.getCase(1,i);
				}
			}	
		}

		//################################################################

	}

	public Case caseOpposeDiag(Grille g,int x,int y){
		if(x==0){
			switch(y){
			case 0: return g.getCase(2,2);


			case 2:	return g.getCase(2,0);

			default: return g.getCase(x,y);

			}


		}else{
			switch(y){
			case 0: return g.getCase(0,2);

			case 2:	return g.getCase(0,0);

			default: return g.getCase(x,y);
			}

		}
	}


	public void attaqueG(Grille g){

		//+++++++++++++++++++++++++++attaqueGagnante horizontale+++++++++++++++++
		for(int i=0;i<3;i++){
			if( g.getCase(i,1).getContenu()==monSymbole){
				if(g.getCase(i,0).getContenu()==monSymbole && g.getCase(i,2).getContenu()==0){
					attaqueGagnante=true;
					caseAttaqueGagnante=g.getCase(i,2);
				}
				if(g.getCase(i,2).getContenu()==monSymbole && g.getCase(i,0).getContenu()==0){
					attaqueGagnante=true;
					caseAttaqueGagnante=g.getCase(i,0);
				}
			}
		}
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

		//***************************attaqueGagnante Verticale*******************
		for(int i=0;i<3;i++){
			if(g.getCase(1,i).getContenu()==monSymbole){
				if(g.getCase(0,i).getContenu()==monSymbole && g.getCase(2,i).getContenu()==0){
					attaqueGagnante=true;
					caseAttaqueGagnante=g.getCase(2,i);
				}
				if(g.getCase(2,i).getContenu()==monSymbole && g.getCase(0,i).getContenu()==0){
					attaqueGagnante=true;
					caseAttaqueGagnante=g.getCase(0,i);
				}
			}
		}
		//****************************************************************


		//===========================attaqueGagnante Diagonale====================

		if(g.getCase(1,1).getContenu()==monSymbole){

			for(int i=0;i<3;i=i+2){
				for(int j=0;j<3;j=j+2){
					if(g.getCase(i,j).getContenu()==monSymbole && caseOpposeDiag(g,i,j).getContenu()==0){
						attaqueGagnante=true;
						caseAttaqueGagnante=caseOpposeDiag(g,i,j);
					}
				}
			}

		}

		//================================================================

	}


	public void coupCommun(Grille g){
		int x=0;


		if(g.getCase(1,1).getContenu()==0){
			caseCoupCommun=g.getCase(1,1);
		}else{
			if(g.getCase(0,2).getContenu()==0){
				caseCoupCommun=g.getCase(0,2);
			}else{
				if(g.getCase(2,0).getContenu()==0){
					caseCoupCommun=g.getCase(2,0);
				}else{
					if(g.getCase(2,2).getContenu()==0){
						caseCoupCommun=g.getCase(2,2);
					}else{
						do{
							x=Caserandom.nextInt(9);	
						}while(g.grille.get(x).getContenu()!=0);

						caseCoupCommun=g.grille.get(x);

					}
				}
			}

		}

	}


	public static void main(String args []){

	}
}
